Access to computer networks has become a ubiquitous part of today's computer usage. Whether accessing a Local Area Network (LAN) in an enterprise environment to access shared network resources, or accessing the Internet via the LAN or other access point, it seems users are always logged on to at least one service that is accessed via a computer network. Moreover, the rapid expansion of cloud-based services has lead to even further usage of computer networks, and these services are forecast to become ever-more prevalent.
At a basic level, network communication is facilitated through “links” between a pair of link partners. For example, in Ethernet links are used in LANs to facilitate communication between two devices coupled at opposing ends of the link, such as a computer and an Ethernet switch or hub. These links are bi-directional, duplex links. For each direction, a packetized stream of data is sent from a transmitter of a sending device to a receiver of a receiving device. Ethernet switches have multiple ports and are connected to multiple devices, while each “endpoint” device may have one or more physical network ports that are connected at an opposing end to a switch, another endpoint, or another type of network element.
To facilitate efficient use of network bandwidth, various flow control mechanism are used. For example, during network communication between a transmitter and a receiver, one or more flow control mechanisms may be used to ensure the transmitter does not overwhelm the receiver with data. As packets are received they are temporarily buffered by the receiver in connection with receiver-side processing of the packets; depending on how the packets are to be handled and other considerations, such as port and/or device congestion, the buffer resources may be insufficient to support the transmitter send rate, forcing received packets to be discarded (commonly referred to as “dropping” packets). The two most common schemes are point-to-point flow control (e.g., using Media Access Channel (MAC) flow control datagrams) and end-to-end credit based flow control (e.g., through use of a Transmission Control Protocol (TCP) transmit window). On an Ethernet link, point-to-point flow control is used between each pair of link partners. Further details of priority flow control are available at http://en.wikipedia.org/wiki/Ethernet_flow_control.